#include <iostream>
#include <vector>
#include "Classe_graphe.h"

using namespace std;

#define _EMNA_

int main(void) {//int argc, char *argv[]) {
  
  Graphe G1; // appel au constructeur par defaut
  G1.printPoints();
  //G1.getValue(0); // fait fermer le programme, vu qu'on a pas d'elements dans le tableau

#ifdef _EMNA_
  // TEST AVEC LE CONSTRUCTEUR DE SAISIE MANUELLE
  Graphe G2(4);

#else
  // TEST AVEC DES LISTES DE COORDONNEES
  // On fait un carre
  double tabX[4] = { 0.0, 2.0, 2.0, 0.0 };
  double tabY[4] = { 0.0, 0.0, 2.0, 2.0 };
  Graphe G2(tabX, tabY, 4);

#endif
  
  G2.printPoints();
  cout << "test de getvalue(1) = (" << G2.getValue(1).getX() << ", " << G2.getValue(1).getY() << ")\n";
  //Point point_pourri = G2.getValue(-1); // fait fermer le programme, mauvais indice
  //Point point_pourri = G2.getValue(4); // fait fermer le programme, mauvais indice
  cout << "perimetre = " << G2.getPerimetre() << endl;
  //cout << "aire = " << G2.getAire() << endl;
  cout << "nombe de points dans le graphe = " << G2.getSize() << endl;
  
  // TEST AVEC UNE LISTE DE POINTS
  Point* Plist = new Point[3];
  Plist[0].setX(0);Plist[0].setY(4);
  Plist[1].setX(0);Plist[1].setY(0);
  Plist[2].setX(3);Plist[2].setY(0);
  Graphe G3(Plist,3);
  G3.printPoints();
  cout << "perimetre = " << G3.getPerimetre() << endl;
  cout << "aire = " << G3.getAire() << endl;

  // TEST AVEC UN VECTOR DE POINTS
  vector<Point> Vec(3);
  Vec[0].setX(0.0);Vec[0].setY(0.0);
  Vec[1].setX(5.0);Vec[1].setY(0.0);
  Vec[2].setX(5.0);Vec[2].setY(5.0);
  Graphe G4(Vec);
  G4.printPoints();
  cout << "perimetre = " << G4.getPerimetre() << endl;
  cout << "aire = " << G4.getAire() << endl;
  // on va rajouter ensuite 3 points
  Plist[0].setX(5.0);Plist[0].setY(10.0);
  Plist[1].setX(0.0);Plist[1].setY(10.0);
  Plist[2].setX(0.0);Plist[2].setY(5.0);
  G4.addPoints(Plist,3);
  G4.printPoints();
  cout << "perimetre = " << G4.getPerimetre() << endl;
  cout << "aire = " << G4.getAire() << endl;
  
  // TEST AVEC UN GRAPHE
  Graphe G5(G2);
  G5.printPoints();
  cout << "perimetre = " << G5.getPerimetre() << endl;
  cout << "aire = " << G5.getAire() << endl;
  
  delete[] Plist;

  return 0;
}
